package com.jprocms.module.cms.service.accesslog;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jprocms.module.cms.dal.dataobject.accesslog.AccessLogDO;
import com.jprocms.module.cms.dal.dataobject.accesspage.AccessPageDO;
import com.jprocms.module.cms.dal.dataobject.accessstatistics.AccessStatisticsDO;
import com.jprocms.module.cms.dal.dataobject.accesstrend.AccessTrendDO;

import java.time.OffsetDateTime;
import java.util.List;

/**
 * 访问日志 Service 接口
 *
 * @author jprocms
 */
public interface AccessLogService extends IService<AccessLogDO> {
    /**
     * 统计访客数
     *
     * @param date   在此日期后
     * @param siteId
     * @return 访客数
     */
    int countVisitors(OffsetDateTime date, Long siteId);

    List<AccessStatisticsDO> statByType(Integer type, OffsetDateTime begin, OffsetDateTime end);


    /**
     * 统计新老访客
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessStatisticsDO> statVisitor(OffsetDateTime begin, OffsetDateTime end);

    /**
     * 统计来源
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessStatisticsDO> statSource(OffsetDateTime begin, OffsetDateTime end);

    /**
     * 统计来源分类
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessStatisticsDO> statSourceType(OffsetDateTime begin, OffsetDateTime end);

    /**
     * 统计国家
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessStatisticsDO> statCountry(OffsetDateTime begin, OffsetDateTime end);

    /**
     * 统计省份
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessStatisticsDO> statProvince(OffsetDateTime begin, OffsetDateTime end);


    /**
     * 统计设备
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessStatisticsDO> statDevice(OffsetDateTime begin, OffsetDateTime end);

    /**
     * 统计操作系统
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessStatisticsDO> statOs(OffsetDateTime begin, OffsetDateTime end);


    /**
     * 统计浏览器
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessStatisticsDO> statBrowser(OffsetDateTime begin, OffsetDateTime end);

    /**
     * 统计受访页面
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessPageDO> statUrl(OffsetDateTime begin, OffsetDateTime end);

    /**
     * 统计入口页面
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessPageDO> statEntryUrl(OffsetDateTime begin, OffsetDateTime end);

    /**
     * 统计趋势
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessTrendDO> statTrend(OffsetDateTime begin, OffsetDateTime end);

    void deleteBeforeDate(OffsetDateTime date);
}
